package cn.jiyun.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class BoxWhiskerTool {

    public static long getTime(Date startTime, Date endTime) throws ParseException {
        if (startTime == null || endTime == null) {
            return 0; // 或者其他默认值
        }
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long eTime = endTime.getTime();
        long sTime = startTime.getTime();
        long diff = (eTime - sTime) / 1000;
        return diff;
    }

    public static List<Double> plot(List<Long> data) {
        if (data.size() == 0) {
            return new ArrayList<>();
        }
        //list从小到大排序
        data.sort((o1, o2) -> o1 > o2 ? 1 : -1);
        //中位数
        double median;
        double min;
        double max;
        //下四分位数  0.25
        double Q1;
        //上四分位数 0.75
        double Q3;

        if (data.size() % 2 == 0) {


            median = (data.get(data.size() / 2 - 1) + data.get(data.size() / 2)) / 2;

//            Q1 = (data[(data.length) / 4 - 1] + data[(data.length) / 4]) / 2;

            //-0.5

            if (data.size() < 4) {
                Q1 = data.get(0);
            } else {
                Q1 = (data.get(data.size() / 4 - 1) + data.get(data.size() / 4)) / 2;
            }

//            Q3 = (data[((data.length) * 3) / 4 - 1] + data[((data.length) * 3) / 4]) / 2;

            if (data.size() < 4) {
                Q3 = data.get(data.size() - 1);
            } else {
                Q3 = (data.get((data.size() * 3) / 4 - 1) + data.get((data.size() * 3) / 4)) / 2;
            }

        } else {
            median = data.get(data.size() / 2);
//            Q1 = data[(data.length) / 4];
            Q1 = data.get(data.size() / 4);
            Q3 = data.get((data.size() * 3) / 4);
        }
        //最大值
        max = data.get(data.size() - 1);
        //最小值
        min = data.get(0);
        ArrayList<Double> list = new ArrayList<>();
        list.add(min);
        list.add(Q1);
        list.add(median);
        list.add(Q3);
        list.add(max);

        return list;
    }
}
